Pass a display in so that multi-display technology works.
struct wl_data_device *data_device,
struct wl_data_offer *_offer)
{
- gdk_wayland_selection_set_offer (_offer);
+ GdkWaylandDeviceData *device = (GdkWaylandDeviceData *)data;
+ gdk_wayland_selection_set_offer (device->display, _offer);
}
static void
gdk_wayland_drop_context_update_targets (device->drop_context);
- dnd_owner = gdk_selection_owner_get (gdk_drag_get_selection (device->drop_context));
+ dnd_owner = gdk_selection_owner_get_for_display (device->display, gdk_drag_get_selection (device->drop_context));
if (dnd_owner)
_gdk_wayland_drag_context_set_source_window (device->drop_context, dnd_owner);
wl_fixed_to_double (y));
_gdk_wayland_drag_context_emit_event (device->drop_context, GDK_DRAG_ENTER,
GDK_CURRENT_TIME);
- gdk_wayland_selection_set_offer (offer);
+ gdk_wayland_selection_set_offer (device->display, offer);
}
static void
g_debug (G_STRLOC ": %s data_device = %p",
G_STRFUNC, data_device);
- local_dnd_owner = gdk_selection_owner_get (gdk_drag_get_selection (device->drop_context));
+ local_dnd_owner = gdk_selection_owner_get_for_display (device->display, gdk_drag_get_selection (device->drop_context));
if (local_dnd_owner)
{
struct wl_data_device *wl_data_device,
struct wl_data_offer *offer)
{
+ GdkWaylandDeviceData *device = (GdkWaylandDeviceData *) data;
+
g_debug (G_STRLOC ": %s wl_data_device = %p wl_data_offer = %p",
G_STRFUNC, wl_data_device, offer);
- gdk_wayland_selection_set_offer (offer);
+ gdk_wayland_selection_set_offer (device->display, offer);
}
static const struct wl_data_device_listener data_device_listener = {
{
GdkWaylandDragContext *wayland_context = GDK_WAYLAND_DRAG_CONTEXT (object);
GdkDragContext *context = GDK_DRAG_CONTEXT (object);
+ GdkDisplay *display = gdk_window_get_display (context->source_window);
contexts = g_list_remove (contexts, context);
if (context->is_source &&
- gdk_selection_owner_get (gdk_drag_get_selection (context)) == context->source_window)
- gdk_wayland_selection_unset_data_source (gdk_drag_get_selection (context));
+ gdk_selection_owner_get_for_display (display, gdk_drag_get_selection (context)) == context->source_window)
+ gdk_wayland_selection_unset_data_source (display, gdk_drag_get_selection (context));
if (wayland_context->data_source)
wl_data_source_destroy (wayland_context->data_source);
gboolean accepted)
{
GdkWaylandDragContext *context_wayland;
+ GdkDisplay *display;
struct wl_data_offer *wl_offer;
context_wayland = GDK_WAYLAND_DRAG_CONTEXT (context);
- wl_offer = gdk_wayland_selection_get_offer ();
+ display = gdk_window_get_display (context->source_window);
+ wl_offer = gdk_wayland_selection_get_offer (display);
if (!wl_offer)
return;
gboolean success,
guint32 time)
{
- if (gdk_selection_owner_get (gdk_drag_get_selection (context)))
- gdk_wayland_selection_unset_data_source (gdk_drag_get_selection (context));
+ GdkDisplay *display = gdk_window_get_display (context->source_window);
+
+ if (gdk_selection_owner_get_for_display (display, gdk_drag_get_selection (context)))
+ gdk_wayland_selection_unset_data_source (display, gdk_drag_get_selection (context));
}
static gboolean
}
static GdkWindow *
-create_dnd_window (void)
+create_dnd_window (GdkScreen *screen)
{
GdkWindowAttr attrs;
- GdkScreen *screen;
guint mask;
- screen = gdk_display_get_default_screen (gdk_display_get_default ());
-
attrs.x = attrs.y = 0;
attrs.width = attrs.height = 100;
attrs.wclass = GDK_INPUT_OUTPUT;
gdk_drag_context_set_device (context, device);
display_wayland = GDK_WAYLAND_DISPLAY (gdk_device_get_display (device));
- context_wayland->dnd_window = create_dnd_window ();
+ context_wayland->dnd_window = create_dnd_window (gdk_window_get_screen (window));
context_wayland->dnd_surface = gdk_wayland_window_get_wl_surface (context_wayland->dnd_window);
context_wayland->data_source =
gdk_wayland_selection_get_data_source (window,
void
gdk_wayland_drop_context_update_targets (GdkDragContext *context)
{
+ GdkDisplay *display = gdk_window_get_display (context->source_window);
g_list_free (context->targets);
- context->targets = g_list_copy (gdk_wayland_selection_get_targets ());
+ context->targets = g_list_copy (gdk_wayland_selection_get_targets (display));
}
void
GdkWaylandSelection * gdk_wayland_selection_new (void);
void gdk_wayland_selection_free (GdkWaylandSelection *selection);
-void gdk_wayland_selection_set_offer (struct wl_data_offer *offer);
-struct wl_data_offer * gdk_wayland_selection_get_offer (void);
-GList * gdk_wayland_selection_get_targets (void);
+void gdk_wayland_selection_set_offer (GdkDisplay *display,
+ struct wl_data_offer *wl_offer);
+struct wl_data_offer * gdk_wayland_selection_get_offer (GdkDisplay *display);
+GList * gdk_wayland_selection_get_targets (GdkDisplay *display);
void gdk_wayland_selection_store (GdkWindow *window,
GdkAtom type,
gint len);
struct wl_data_source * gdk_wayland_selection_get_data_source (GdkWindow *owner,
GdkAtom selection);
-void gdk_wayland_selection_unset_data_source (GdkAtom selection);
+void gdk_wayland_selection_unset_data_source (GdkDisplay *display, GdkAtom selection);
EGLSurface gdk_wayland_window_get_egl_surface (GdkWindow *window,
EGLConfig config);
#include "gdkwayland.h"
#include "gdkprivate-wayland.h"
#include "gdkdisplay-wayland.h"
+#include "gdkdndprivate.h"
#include "gdkselection.h"
#include "gdkproperty.h"
#include "gdkprivate.h"
};
void
-gdk_wayland_selection_set_offer (struct wl_data_offer *wl_offer)
+gdk_wayland_selection_set_offer (GdkDisplay *display,
+ struct wl_data_offer *wl_offer)
{
- GdkDisplay *display = gdk_display_get_default ();
GdkWaylandSelection *selection = gdk_wayland_display_get_selection (display);
if (selection->offer == wl_offer)
}
struct wl_data_offer *
-gdk_wayland_selection_get_offer (void)
+gdk_wayland_selection_get_offer (GdkDisplay *display)
{
- GdkDisplay *display = gdk_display_get_default ();
GdkWaylandSelection *selection = gdk_wayland_display_get_selection (display);
return selection->offer;
}
GList *
-gdk_wayland_selection_get_targets (void)
+gdk_wayland_selection_get_targets (GdkDisplay *display)
{
- GdkDisplay *display = gdk_display_get_default ();
GdkWaylandSelection *selection = gdk_wayland_display_get_selection (display);
return selection->targets;
const guchar *data,
gint len)
{
- GdkDisplay *display = gdk_display_get_default ();
+ GdkDisplay *display = gdk_window_get_display (window);
GdkWaylandSelection *selection = gdk_wayland_display_get_selection (display);
GArray *array;
static SelectionBuffer *
gdk_wayland_selection_lookup_requestor_buffer (GdkWindow *requestor)
{
- GdkDisplay *display = gdk_display_get_default ();
+ GdkDisplay *display = gdk_window_get_display (requestor);
GdkWaylandSelection *selection = gdk_wayland_display_get_selection (display);
SelectionBuffer *buffer_data;
GHashTableIter iter;
{
GdkWaylandSelection *wayland_selection = data;
GdkDragContext *context;
+ GdkDisplay *display;
g_debug (G_STRLOC ": %s source = %p",
G_STRFUNC, source);
context = gdk_wayland_drag_context_lookup_by_data_source (source);
+ display = gdk_window_get_display (context->source_window);
if (source == wayland_selection->dnd_source)
- gdk_wayland_selection_unset_data_source (atoms[ATOM_DND]);
+ gdk_wayland_selection_unset_data_source (display, atoms[ATOM_DND]);
else if (source == wayland_selection->clipboard_source)
- gdk_wayland_selection_unset_data_source (atoms[ATOM_CLIPBOARD]);
+ gdk_wayland_selection_unset_data_source (display, atoms[ATOM_CLIPBOARD]);
if (context)
gdk_wayland_drag_context_undo_grab (context);
gdk_wayland_selection_get_data_source (GdkWindow *owner,
GdkAtom selection)
{
- GdkDisplay *display = gdk_display_get_default ();
+ GdkDisplay *display = gdk_window_get_display (owner);
GdkWaylandSelection *wayland_selection = gdk_wayland_display_get_selection (display);
struct wl_data_source *source = NULL;
GdkWaylandDisplay *display_wayland;
}
void
-gdk_wayland_selection_unset_data_source (GdkAtom selection)
+gdk_wayland_selection_unset_data_source (GdkDisplay *display, GdkAtom selection)
{
- GdkDisplay *display = gdk_display_get_default ();
GdkWaylandSelection *wayland_selection = gdk_wayland_display_get_selection (display);
if (selection == atoms[ATOM_CLIPBOARD])
{
GdkDeviceManager *device_manager;
- GdkDisplay *display;
GdkDevice *device;
- display = gdk_display_get_default ();
device_manager = gdk_display_get_device_manager (display);
device = gdk_device_manager_get_client_pointer (device_manager);
GdkDisplay *display;
GdkDevice *device;
- display = gdk_display_get_default ();
+ display = gdk_window_get_display (window);
device_manager = gdk_display_get_device_manager (display);
device = gdk_device_manager_get_client_pointer (device_manager);
gdk_wayland_device_set_selection (device, data_source);
}
void
-gdk_wayland_selection_clear_targets (GdkAtom selection)
+gdk_wayland_selection_clear_targets (GdkDisplay *display, GdkAtom selection)
{
- gdk_wayland_selection_unset_data_source (selection);
+ gdk_wayland_selection_unset_data_source (display, selection);
}
#define gdk_wayland_selection_clear_targets gdk_wayland_selection_clear_targets_libgtk_only
GDK_AVAILABLE_IN_ALL
void
-gdk_wayland_selection_clear_targets (GdkAtom selection);
+gdk_wayland_selection_clear_targets (GdkDisplay *display, GdkAtom selection);
#define gdk_wayland_drag_context_get_dnd_window gdk_wayland_drag_context_get_dnd_window_libgtk_only
GDK_AVAILABLE_IN_ALL
#ifdef GDK_WINDOWING_WAYLAND
if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
- gdk_wayland_selection_clear_targets (selection);
+ gdk_wayland_selection_clear_targets (gtk_widget_get_display (widget), selection);
#endif
lists = g_object_get_data (G_OBJECT (widget), gtk_selection_handler_key);